# 为所有Tasks数据的预计开始时间和结束时间字段赋值的修复脚本
import sys
import random
from datetime import datetime, timedelta
from tasks.models import Tasks

print("开始修复所有任务的预计时间字段...")

try:
    # 查找预计开始时间或结束时间为空的任务
    null_date_tasks = Tasks.objects.filter(
        fc_plan_start_time__isnull=True
    ) | Tasks.objects.filter(
        fc_plan_end_time__isnull=True
    )
    
    null_tasks_count = null_date_tasks.count()
    print(f"找到{null_tasks_count}条需要修复的任务数据")
    
    # 修复这些任务的数据
    fixed_count = 0
    today = datetime.now().date()
    
    for task in null_date_tasks:
        # 为每个任务生成随机的预计时间
        if task.fc_plan_start_time is None:
            # 预计开始时间: 未来1-90天内的随机日期
            task.fc_plan_start_time = today + timedelta(days=random.randint(1, 90))
        
        if task.fc_plan_end_time is None:
            # 预计结束时间: 预计开始时间后3-30天内的随机日期
            task.fc_plan_end_time = task.fc_plan_start_time + timedelta(days=random.randint(3, 30))
        
        # 保存更新
        task.save()
        fixed_count += 1
        
        # 每修复20条显示进度
        if fixed_count % 20 == 0:
            print(f"已修复{fixed_count}/{null_tasks_count}条数据")
    
    print(f"\n✅ 修复完成！成功为{fixed_count}条任务设置了预计开始时间和结束时间")
    
    # 再次验证修复结果
    remaining_null_start = Tasks.objects.filter(fc_plan_start_time__isnull=True).count()
    remaining_null_end = Tasks.objects.filter(fc_plan_end_time__isnull=True).count()
    
    print(f"\n验证结果：")
    print(f"修复后预计开始时间为空的任务数: {remaining_null_start}")
    print(f"修复后预计结束时间为空的任务数: {remaining_null_end}")
    
    if remaining_null_start == 0 and remaining_null_end == 0:
        print("\n🎉 所有任务的预计时间字段都已正确赋值！")
    else:
        print("\n⚠️ 仍有部分任务的预计时间字段为空，请检查")
    
    # 显示一些修复后的数据示例
    print("\n修复后的数据示例：")
    sample_tasks = Tasks.objects.order_by('-id')[:5]
    for task in sample_tasks:
        print(f"任务ID: {task.task_id}")
        print(f"  预计开始时间: {task.fc_plan_start_time}")
        print(f"  预计结束时间: {task.fc_plan_end_time}")
    
    # 统计总任务数
    total_tasks = Tasks.objects.count()
    print(f"\n数据库中总任务数: {total_tasks}")
    
except Exception as e:
    print(f"\n❌ 修复过程出错: {e}")
    sys.exit(1)